/**
 * 
 */
package talayaco.manager.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import talayaco.dao.AnimalDAO;
import talayaco.dao.ClienteDAO;
import talayaco.dao.CorralDAO;
import talayaco.dao.ProveedorDAO;
import talayaco.dao.impl.AnimalDAOImpl;
import talayaco.dao.impl.ClienteDAOImpl;
import talayaco.dao.impl.CorralDAOImpl;
import talayaco.dao.impl.ProveedorDAOImpl;
import talayaco.enums.DiagnosticoEnum;
import talayaco.enums.EstadoAnimalEnum;
import talayaco.enums.TipoAnimalEnum;
import talayaco.manager.GestionAnimalesMAN;
import talayaco.utils.DateUtils;
import talayaco.utils.MapToVo;
import talayaco.utils.StringUtils;
import talayaco.vo.DiagnosticoGeneralVO;
import talayaco.vo.ReporteAnimalVO;
import talayaco.vo.ReporteRecriaVO;

/**
 * @author Lucas
 * 
 */
public class GestionAnimalesMANimpl implements GestionAnimalesMAN {

	/**
	 * Animal DAO
	 */
	private static AnimalDAO animalesDAO = new AnimalDAOImpl();

	/**
	 * Proveedor DAO
	 */
	private static ProveedorDAO proveedorDAO = new ProveedorDAOImpl();

	/**
	 * Corral Dao
	 */
	private static CorralDAO corralDAO = new CorralDAOImpl();

	/**
	 * Cliente DAO
	 */
	private static ClienteDAO clienteDAO = new ClienteDAOImpl();

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMan#insertAnimal(java.util.Map,
	 * java.lang.String, java.util.Date)
	 */
	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#insertAnimal(java.util.List,
	 * java.lang.String, java.util.Date)
	 */
	public void insertAnimal(List<Map<String, Object>> datosIngreso,
			String nombreProveedor, Date unaFecha) throws Exception {

		Long cantidadTotalAnimales;
		Double pesoOrigenPorAnimal;
		Double pesoTysaPorAnimal;
		Double dbOrigen;
		Double dbTysa;
		Integer cantidadConCaravana;

		Long idProveedor = proveedorDAO.getIdProveedorByNombre(nombreProveedor);

		Map<String, Object> datosAnimal = new HashMap<String, Object>();
		datosAnimal.put("idProveedor", idProveedor);
		datosAnimal.put("fechaIngreso", unaFecha);
		datosAnimal.put("estado", EstadoAnimalEnum.INGRESADA.getId());

		for (Map<String, Object> ingresoAnimal : datosIngreso) {
			cantidadConCaravana = 0;

			datosAnimal.put("tipoAnimal", TipoAnimalEnum.getId(ingresoAnimal
					.get("tipoAnimal").toString()));

			cantidadTotalAnimales = Long.parseLong(ingresoAnimal
					.get("cantidad").toString());
			pesoOrigenPorAnimal = Double.parseDouble(ingresoAnimal.get(
					"pesoOrigen").toString())
					/ cantidadTotalAnimales;
			pesoTysaPorAnimal = Double.parseDouble(ingresoAnimal
					.get("pesoTysa").toString()) / cantidadTotalAnimales;
			dbOrigen = Double.parseDouble(ingresoAnimal.get("dbOrigen")
					.toString());
			dbTysa = Double.parseDouble(ingresoAnimal.get("dbTysa").toString());
			datosAnimal.put("desbasteOrigen", String.valueOf(dbOrigen));
			datosAnimal.put("desbasteTysa", String.valueOf(dbTysa));
			datosAnimal
					.put("pesadaOrigen", String.valueOf(pesoOrigenPorAnimal));
			datosAnimal.put("pesadaTysaIngreso",
					String.valueOf(pesoTysaPorAnimal));

			@SuppressWarnings("unchecked")
			List<Map<String, String>> animalesConCaravana = (List<Map<String, String>>) ingresoAnimal
					.get("listadoCaravanas");
			if (animalesConCaravana != null) {
				for (Map<String, String> animalConCaravana : animalesConCaravana) {
					datosAnimal.put("caravana",
							animalConCaravana.get("nroCaravana"));

					String observacion = animalConCaravana.get("observaciones")
							.toString();
					if (observacion.equals("")) {
						datosAnimal.put("observaciones", null);
					} else {
						datosAnimal.put("observaciones", observacion);
					}

					if (animalConCaravana.get("tipoCaravana2").toString()
							.equals("DTA"))
						datosAnimal.put("enBlanco", 1);
					else
						datosAnimal.put("enBlanco", 0);

					if (animalConCaravana.get("tipoCaravana1").toString()
							.equals("Hoteleria"))
						datosAnimal.put("hotelaria", 1);
					else
						datosAnimal.put("hotelaria", 0);

					animalesDAO.insertAnimal(datosAnimal);
					cantidadConCaravana++;
				}
			}
			for (int i = cantidadConCaravana; i < cantidadTotalAnimales; i++) {
				datosAnimal.put("caravana", null);
				datosAnimal.put("observaciones", null);
				datosAnimal.put("enBlanco", 0);
				datosAnimal.put("hotelaria", 0);
				animalesDAO.insertAnimal(datosAnimal);
			}
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getAnimalByCaravana(java.lang.String)
	 */
	public Map<String, String> getAnimalByCaravana(String caravana)
			throws Exception {
		Map<String, String> datosAnimal = new HashMap<String, String>();
		datosAnimal = (Map<String, String>) animalesDAO
				.getAnimalByCaravana(caravana);
		if (!StringUtils.isNullOrBlank(datosAnimal.get("idCorral"))) {
			datosAnimal.put("idCorral",
					corralDAO.getNombreCorralById(datosAnimal.get("idCorral")));
		}

		datosAnimal.put("tipoAnimal",
				TipoAnimalEnum.valueOf(datosAnimal.get("tipoAnimal"))
						.getDescripcion());
		return datosAnimal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#existeAnimal(java.lang.String)
	 */
	public Boolean existeAnimal(String caravana) throws Exception {
		String existe = new String();
		existe = (String) animalesDAO.existeAnimal(caravana);

		if (existe.equals("1"))
			return true;
		else
			return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#existeAnimal(java.lang.String)
	 */
	public Boolean existeAnimalByCaravanaAndTipo(String caravana, String tipo)
			throws Exception {
		String existe = new String();
		Map<String, String> datosConsulta = new HashMap<String, String>();
		datosConsulta.put("caravana", caravana);
		datosConsulta.put("tipo", tipo);

		existe = (String) animalesDAO
				.existeAnimalByCaravanaAndTipo(datosConsulta);

		if (existe.equals("1"))
			return true;
		else
			return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getAnimalParaModificacionByCaravana
	 * (java.lang.String)
	 */
	public Map<String, String> getAnimalParaModificacionByCaravana(
			String caravana) throws Exception {
		Map<String, String> animal = animalesDAO
				.getAnimalParaModificacionByCaravana(caravana);
		animal.put("tipoAnimal",
				TipoAnimalEnum.valueOf(animal.get("tipoAnimal"))
						.getDescripcion());
		return animal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getAnimalParaModificacionById(java
	 * .lang.String)
	 */
	public Map<String, String> getAnimalParaModificacionById(String id)
			throws Exception {

		Map<String, String> animal = animalesDAO
				.getAnimalParaModificacionById(id);
		animal.put("tipoAnimal",
				TipoAnimalEnum.valueOf(animal.get("tipoAnimal"))
						.getDescripcion());
		return animal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getAnimalesParaModificacionByCorral
	 * (java.lang.String)
	 */
	public List<Map<String, String>> getAnimalesParaModificacionByCorral(
			String idCorral) throws Exception {
		return animalesDAO.getAnimalesParaModificacionByCorral(idCorral);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#updateAnimalEgreso(java.util.Map)
	 */
	@SuppressWarnings("unchecked")
	public void updateAnimalEgreso(List<Map<String, Object>> datosEgreso,
			Date fechaEgreso, String nombreCliente, String tipoEgreso)
			throws Exception {

		Long cantidadTotalAnimales;
		Double pesoEgresoAnimal;

		Map<String, Object> datosAnimal = new HashMap<String, Object>();
		datosAnimal.put("fechaEgreso", fechaEgreso);

		if (tipoEgreso.equals("Venta de Animales")) {
			datosAnimal.put("estado", EstadoAnimalEnum.VENDIDA.getId());
		} else if (tipoEgreso.equals("Muerte de Animales")) {
			datosAnimal.put("estado", EstadoAnimalEnum.MUERTA.getId());
		} else {
			datosAnimal.put("estado", EstadoAnimalEnum.ERROR.getId());
		}

		if (!StringUtils.isNullOrBlank(nombreCliente))
			datosAnimal.put("idCliente",
					clienteDAO.getClienteByNombre(nombreCliente).get("id"));

		for (Map<String, Object> egresoAnimal : datosEgreso) {

			cantidadTotalAnimales = Long.parseLong(egresoAnimal.get("cantidad")
					.toString());
			pesoEgresoAnimal = Double.parseDouble(egresoAnimal.get("pesoTysa")
					.toString()) / cantidadTotalAnimales;
			datosAnimal.put("pesadaTysaEgreso",
					String.valueOf(pesoEgresoAnimal));

			String tipoAnimal = TipoAnimalEnum.getId(egresoAnimal.get(
					"tipoAnimal").toString());

			List<Map<String, String>> animalesConCaravana = (List<Map<String, String>>) egresoAnimal
					.get("listadoCaravanas");
			if (animalesConCaravana != null) {
				for (Map<String, String> animalConCaravana : animalesConCaravana) {
					datosAnimal.put("caravana",
							animalConCaravana.get("nroCaravana"));
					datosAnimal.put("observaciones",
							animalConCaravana.get("observaciones"));
					animalesDAO.updateAnimalEgresoByCaravana(datosAnimal);
				}
			}

			List<Map<String, String>> animalesCorral = (List<Map<String, String>>) egresoAnimal
					.get("listadoCorrales");
			if (animalesCorral != null) {
				for (Map<String, String> animalCorral : animalesCorral) {

					String idCorral = corralDAO
							.getIdCorralByNombre(animalCorral
									.get("nombreCorral"));
					Map<String, String> datosConsulta = new HashMap<String, String>();
					datosConsulta.put("tipoAnimal", tipoAnimal);
					datosConsulta.put("corralOrigen", idCorral);
					List<Long> idsAnimales = animalesDAO
							.getIdsAnimales(datosConsulta);

					for (int i = 0; i < Integer.parseInt(animalCorral
							.get("cantidad")); i++) {
						datosAnimal.put("idAnimal", idsAnimales.get(i)
								.toString());
						animalesDAO.updateAnimalEgresoById(datosAnimal);
					}
				}
			}

		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#cantidadAnimalesByTipoyCorral(int,
	 * java.lang.String, java.lang.Long)
	 */
	public Integer cantidadAnimalesByTipoyCorral(int cantidad, String tipo,
			String corral) throws Exception {
		Map<String, String> datosConsulta = new HashMap<String, String>();
		datosConsulta.put("tipo", tipo);
		datosConsulta.put("idCorral", corralDAO.getIdCorralByNombre(corral));
		Integer cantidadAnimales = Integer.parseInt(animalesDAO
				.cantidadAnimalesByTipoyCorral(datosConsulta));

		if (cantidadAnimales >= cantidad) {
			return -1;
		} else {
			return cantidadAnimales;
		}

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#getAnimalesByTipoSinCorral(int,
	 * java.lang.String)
	 */
	public Integer cantidadAnimalesByTipoSinCorral(int cantidad, String tipo)
			throws Exception {
		Integer cantidadAnimales = Integer.parseInt(animalesDAO
				.getAnimalesByTipoSinCorral(tipo));

		if (cantidadAnimales >= cantidad) {
			return -1;
		} else {
			return cantidadAnimales;
		}

	}

	// getanimalesbytiposincorral, (tipo y una cantidad)

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getNombresByCorralConCaravana(java
	 * .lang.String)
	 */
	public String[] getNombresByCorralConCaravana(String nombreCorral)
			throws Exception {
		List<String> listadoNombres = new ArrayList<String>();
		String idCorral = corralDAO.getIdCorralByNombre(nombreCorral);
		listadoNombres = (List<String>) animalesDAO
				.getAnimalByCorralConCaravana(idCorral);
		String[] arrayNombres = new String[listadoNombres.size() + 1];
		for (int i = 1; i <= listadoNombres.size(); i++) {
			arrayNombres[i] = listadoNombres.get(i - 1);
		}
		return arrayNombres;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getAnimalParaMovimientoByCaravana
	 * (java.lang.String)
	 */
	public Map<String, String> getAnimalParaMovimientoByCaravana(String caravana)
			throws Exception {
		Map<String, String> animal = animalesDAO
				.getAnimalParaMovimientoByCaravana(caravana);
		animal.put("tipoAnimal",
				TipoAnimalEnum.valueOf(animal.get("tipoAnimal"))
						.getDescripcion());
		return animal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#updateAnimalByCarana(java.lang.String
	 * , java.lang.String, java.lang.String, java.lang.String)
	 */
	public void updateAnimalByCarana(String caravana, String caravanaNueva,
			String tipoAnimal, String observacion) throws Exception {

		String tipoAnimalId = TipoAnimalEnum.getId(tipoAnimal);
		animalesDAO.updateAnimalByCarana(caravana, caravanaNueva, tipoAnimalId,
				observacion);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#updateAnimalByCorralyTipo(java.lang
	 * .String, java.lang.String, java.lang.String, java.lang.String,
	 * java.lang.String)
	 */
	public void updateAnimalById(String id, String caravana,
			String tipoAnimalNuevo, String observacion) throws Exception {
		String tipoAnimalNuevoId = TipoAnimalEnum.getId(tipoAnimalNuevo);

		animalesDAO.updateAnimalByCorralyTipo(id, caravana, tipoAnimalNuevoId,
				observacion);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#getIdsAnimales(java.util.Map)
	 */
	public String[] getIdsAnimales(String tipoAnimal, String nombraCorral)
			throws Exception {

		String idCorral = corralDAO.getIdCorralByNombre(nombraCorral);
		Map<String, String> datosConsulta = new HashMap<String, String>();
		datosConsulta.put("tipoAnimal", tipoAnimal);
		datosConsulta.put("corralOrigen", idCorral);
		List<Long> idsAnimales = animalesDAO.getIdsAnimales(datosConsulta);
		String[] arrayIds = new String[idsAnimales.size()];
		for (int i = 0; i < idsAnimales.size(); i++) {
			arrayIds[i] = idsAnimales.get(i).toString();
		}
		return arrayIds;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getDatosReporteAnimal(java.util.Map)
	 */
	public List<ReporteAnimalVO> getDatosReporteAnimal(
			Map<String, Object> datosConsulta, Date fechaInicio, Date FechaFin)
			throws Exception {

		if (!StringUtils.isNullOrBlank((String) datosConsulta.get("corral"))) {

			if (datosConsulta.get("corral").equals("Sin Corral")) {

				datosConsulta.put("corral", null);
				datosConsulta.put("sinCorral", "Sin Corral");

			} else if (!datosConsulta.get("corral").equals("Todos")) {
				datosConsulta.put(
						"corral",
						corralDAO.getIdCorralByNombre(
								(String) datosConsulta.get("corral"))
								.toString());
			}

		}

		if (!StringUtils.isNullOrBlank((String) datosConsulta.get("proveedor"))
				&& !datosConsulta.get("proveedor").equals("Todos")) {
			datosConsulta
					.put("proveedor",
							proveedorDAO.getIdProveedorByNombre(
									(String) datosConsulta.get("proveedor"))
									.toString());
		}

		if (!StringUtils.isNullOrBlank((String) datosConsulta.get("cliente"))
				&& !datosConsulta.get("cliente").equals("Todos")) {
			datosConsulta.put(
					"cliente",
					clienteDAO.getClienteByNombre(
							(String) datosConsulta.get("cliente")).get("id"));
		}

		if (!StringUtils.isNullOrBlank((String) datosConsulta
				.get("diagnostico"))
				&& !datosConsulta.get("diagnostico").equals("Todos")) {
			datosConsulta.put("diagnostico", DiagnosticoEnum
					.getId(datosConsulta.get("diagnostico").toString()));
		}

		if (!StringUtils.isNullOrBlank((String) datosConsulta.get("estado"))
				&& !datosConsulta.get("estado").equals("Todos")) {
			datosConsulta.put("estado", EstadoAnimalEnum
					.getId((String) datosConsulta.get("estado")));
		}

		if (!StringUtils.isNullOrBlank((String) datosConsulta.get("dta"))
				&& !datosConsulta.get("dta").equals("Todos")) {
			if (datosConsulta.get("dta").equals("NO")) {
				datosConsulta.put("dta", "0");
			} else {
				datosConsulta.put("dta", "1");
			}
		}

		if (!StringUtils.isNullOrBlank((String) datosConsulta.get("rodeoCria"))
				&& !datosConsulta.get("rodeoCria").equals("Todos")) {
			if (datosConsulta.get("rodeoCria").equals("NO")) {
				datosConsulta.put("rodeoCria", "0");
			} else {
				datosConsulta.put("rodeoCria", "1");
			}
		} else {
			datosConsulta.put("rodeoCria", "Todos");
		}

		if (!StringUtils.isNullOrBlank((String) datosConsulta.get("hoteleria"))
				&& !datosConsulta.get("hoteleria").equals("Todos")) {
			if (datosConsulta.get("hoteleria").equals("No")) {
				datosConsulta.put("hoteleria", "0");
			} else {
				datosConsulta.put("hoteleria", "1");
			}
		}

		if (fechaInicio != null && FechaFin != null) {
			datosConsulta.put("fechaInicio", fechaInicio);
			datosConsulta.put("fechaFin", FechaFin);
		} else {
			datosConsulta.put("fechaInicio", null);
			datosConsulta.put("fechaFin", null);
		}

		List<Map<String, String>> datosReporteAnimales = animalesDAO
				.getDatosReporteAnimal(datosConsulta);

		List<ReporteAnimalVO> datosReporteAnimalesVO = new ArrayList<ReporteAnimalVO>();
		ReporteAnimalVO reporteAnimalVO = new ReporteAnimalVO();

		List<Map<String, String>> clientes = clienteDAO.getClientes();
		List<Map<String, String>> proveedores = proveedorDAO
				.getProveedores(null);
		List<Map<String, String>> corrales = corralDAO.getCorrales();

		Integer indice = 1;
		for (Map<String, String> reporteAnimal : datosReporteAnimales) {
			reporteAnimalVO = MapToVo.mapToReporteAnimalVO(reporteAnimal,
					clientes, proveedores, corrales, indice);
			datosReporteAnimalesVO.add(reporteAnimalVO);
			indice++;
		}
		return datosReporteAnimalesVO;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#validarFechaIngresoAnimal(java.lang
	 * .String)
	 */
	public String validarFechaIngresoAnimal(String caravana, Date fechaDesde)
			throws Exception {
		Date fecha = animalesDAO
				.validarFechaIngresoAnimal(caravana, fechaDesde);
		if (fecha != null)
			return DateUtils.format(fecha, DateUtils.FORMAT_DDMMYYYY);
		else
			return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getCaravanaByCliente(java.lang.String
	 * )
	 */
	public List<String> getCaravanaByProveedor(String nombreProveedor)
			throws Exception {
		String idProveedor = proveedorDAO.getIdProveedorByNombre(
				nombreProveedor).toString();
		return animalesDAO.getCaravanaByProveedor(idProveedor);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getCaravanaByCliente(java.lang.String
	 * )
	 */
	public List<String> getCaravanaByCliente(String nombreCliente)
			throws Exception {
		String idCliente = clienteDAO.getClienteByNombre(nombreCliente).get(
				"id");
		return animalesDAO.getCaravanaByCliente(idCliente);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getDatosValidacion(java.lang.String)
	 */
	public Map<String, String> getDatosValidacion(String caravana)
			throws Exception {
		Map<String, String> datosAnimal = animalesDAO
				.getDatosValidacion(caravana);
		return datosAnimal;

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#getProveedorByCaravana(java.lang.
	 * String)
	 */
	public String getClienteByCaravana(String caravana) throws Exception {
		return animalesDAO.getClienteByCaravana(caravana);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#insertRecria(java.util.Map)
	 */
	public void insertRecria(Map<String, Object> datos) throws Exception {

		Map<String, String> madre = getAnimalParaModificacionByCaravana((String) datos
				.get("caravanaMadre"));
		Map<String, String> cria = getAnimalParaModificacionByCaravana((String) datos
				.get("caravanaCria"));

		String idMadre = madre.get("id");
		String idCria = cria.get("id");

		datos.put("idMadre", idMadre);
		datos.put("idCria", idCria);

		animalesDAO.updateAnimalPesoTysaIngreso(datos);

		animalesDAO.insertRecria(datos);
	}

	public List<ReporteRecriaVO> getReporteRecria(
			Map<String, String> datosConsulta) throws Exception {

		Map<String, Object> datosRecria = new HashMap<String, Object>();

		if (datosConsulta.get("fechaDesdeParto") != null) {

			Date fechaDesdeParto = DateUtils.parse(
					datosConsulta.get("fechaDesdeParto"),
					DateUtils.FORMAT_DDMMYYYY);
			datosRecria.put("fechaDesdeParto", fechaDesdeParto);

		} else
			datosRecria.put("fechaDesdeParto", null);

		if (datosConsulta.get("fechaHastaParto") != null) {
			Date fechaHastaParto = DateUtils.parse(
					datosConsulta.get("fechaHastaParto"),
					DateUtils.FORMAT_DDMMYYYY);
			datosRecria.put("fechaHastaParto", fechaHastaParto);

		} else
			datosRecria.put("fechaHastaParto", null);

		if (datosConsulta.get("tipoCaravana") != null) {
			if (datosConsulta.get("tipoCaravana").equals("Animal Madre")) {
				datosRecria.put("caravanaMadre", datosConsulta.get("caravana"));
			} else {
				datosRecria.put("caravanaCria", datosConsulta.get("caravana"));
			}
		}
		datosRecria.put("estado", datosConsulta.get("estado"));

		List<Map<String, String>> datosReporteCria = animalesDAO
				.getDatosReporteRecria(datosRecria);

		List<ReporteRecriaVO> reporteRecriasVO = MapToVo
				.mapToReporteRecria(datosReporteCria);

		return reporteRecriasVO;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#existeRelacionCriaMadre(java.lang
	 * .String, java.lang.String)
	 */
	public Boolean existeRelacionCriaMadre(String caravanaMadre,
			String caravanaHija) throws Exception {

		String cantidad = animalesDAO.existeRelacionCriaMadre(caravanaMadre,
				caravanaHija);

		if (cantidad.equals("1"))
			return true;
		else
			return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#updateRecria(java.util.Map)
	 */
	public void updateRecria(Map<String, Object> datosConsulta)
			throws Exception {

		animalesDAO.updateRecria(datosConsulta);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#updateRecriaCompleto(java.util.Map)
	 */
	public void updateRecriaCompleto(Map<String, Object> datosConsulta)
			throws Exception {

		if (datosConsulta.get("kgDestete") != null) {
			animalesDAO.updateAnimalPesoTysaIngreso(datosConsulta);

		}
		animalesDAO.updateRecriaCompleto(datosConsulta);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#getDatosRecria(java.util.Map)
	 */
	public Map<String, String> getDatosRecria(Map<String, Object> datosConsulta)
			throws Exception {
		List<Map<String, String>> datosRecria = animalesDAO
				.getDatosReporteRecria(datosConsulta);
		return datosRecria.get(0);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#updateAnimalRodeoCria(java.util.Map)
	 */
	public void updateAnimalRodeoCria(Map<String, Object> datosConsulta)
			throws Exception {
		animalesDAO.updateAnimalRodeoCria(datosConsulta);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#saveDiagnostico(java.util.Map)
	 */
	public void saveDiagnostico(Map<String, Object> datosConsulta)
			throws Exception {

		if (datosConsulta.get("fecha") != null) {
			Date fechaHastaParto = DateUtils.parse(datosConsulta.get("fecha")
					.toString(), DateUtils.FORMAT_DDMMYYYY);
			datosConsulta.put("fecha", fechaHastaParto);
		}
		
		if (datosConsulta.get("fechaHastaIATF") != null) {
			Date fechaIATF = DateUtils.parse(datosConsulta.get("fechaHastaIATF")
					.toString(), DateUtils.FORMAT_DDMMYYYY);
			datosConsulta.put("fechaHastaIATF", fechaIATF);
		}

		String idAnimal = animalesDAO.getAnimalParaModificacionByCaravana(
				datosConsulta.get("caravana").toString()).get("id");
		datosConsulta.put("idAnimal", idAnimal);
		animalesDAO.saveDiagnostico(datosConsulta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#getRodeoCria(java.lang.String)
	 */
	public Boolean getRodeoCria(String caravana) throws Exception {
		String rodeoCria = animalesDAO.getRodeoCria(caravana);
		if (rodeoCria.equals("0")) {
			return Boolean.FALSE;
		} else {

			return Boolean.TRUE;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.manager.GestionAnimalesMAN#abrirReporteDiagnosticoGeneral()
	 */
	public List<DiagnosticoGeneralVO> abrirReporteDiagnosticoGeneral()
			throws Exception {

		List<DiagnosticoGeneralVO> listDiagnosticos = new ArrayList<DiagnosticoGeneralVO>();
		for (String idDiagnostico : DiagnosticoEnum.getListId()) {
			DiagnosticoGeneralVO diagnostico = new DiagnosticoGeneralVO();
			diagnostico
					.setNombre(DiagnosticoEnum.getDescripcion(idDiagnostico));

			String cantidad = animalesDAO
					.getCantidadDiagnosticos(idDiagnostico);
			diagnostico.setCantidad(cantidad);

			listDiagnosticos.add(diagnostico);
		}
		return listDiagnosticos;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.manager.GestionAnimalesMAN#abrirReporteDiagnosticoByCaravana()
	 */
	public List<DiagnosticoGeneralVO> abrirReporteDiagnosticoByCaravana(
			String caravana) throws Exception {

		String idAnimal = animalesDAO.getAnimalParaModificacionByCaravana(
				caravana).get("id");
		List<Map<String, String>> diagnosticos = animalesDAO
				.getDiagnosticos(idAnimal);
		List<DiagnosticoGeneralVO> listDiagnosticos = MapToVo
				.mapToDiagnostico(diagnosticos);

		return listDiagnosticos;
	}

}
